//package com.shangxian.giveithome.controller;
//
//import com.shangxian.giveithome.entity.Img;
//import com.shangxian.giveithome.mapper.ImgMapper;
//import com.shangxian.giveithome.service.impl.ImgFeiServiceImpl;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.util.DigestUtils;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestParam;
//import org.springframework.web.bind.annotation.RestController;
//
//import javax.annotation.Resource;
//import java.io.ByteArrayOutputStream;
//import java.io.DataInputStream;
//import java.io.File;
//import java.io.IOException;
//import java.net.MalformedURLException;
//import java.net.URL;
//import java.util.ArrayList;
//import java.util.List;
//
//@RequestMapping("/testFileUtil")
//@RestController
//@Slf4j
//public class TestController {
//
//    @Resource
//    private ImgFeiServiceImpl imgFeiServiceImpl;
//
//    @Resource
//    private ImgMapper imgMapper;
//
//
//    private static boolean isSameFiles(byte[] fileByte1, byte[] fileByte2) {
//        // 如果两文件有一个为null返回false
//        // 不为null但长度不等返回false
//        if (fileByte1 == null || fileByte2 == null
//                || fileByte1.length != fileByte2.length) {
//            return false;
//        }
//        String file1Md5 = DigestUtils.md5DigestAsHex(fileByte1);
//        String file2Md5 = DigestUtils.md5DigestAsHex(fileByte2);
//        // 如果两文件的md5值相同，则文件相同
//        if (file1Md5.equals(file2Md5)) {
//            return true;
//        }
//        return false;
//    }
//
//    //@DeleteMapping("/deleteImgAllFile")
//    public String deleteImgAllFile() {
//        List<Img> imgList = imgMapper.queryAll();
//        imgMapper.deleteById(imgList);
//        imgFeiServiceImpl.deletes(imgList);
//        return "删除成功";
//    }
//
//    /**
//     * 从网络链接下载文件对应数据库地址迁移
//     * @param urlPrefix
//     * @return
//     */
//    //@PostMapping("/moveNetFile")
//    public String moveNetFile(String urlPrefix) {
//        List<Img> imgList = imgMapper.queryAll();
//        for (Img img : imgList) {
//            log.info("图片id: {}", img.getId());
//            String path = img.getPath();
//            int extIndex = path.lastIndexOf(".");
//            int fileIndex = path.lastIndexOf("/");
//            if (extIndex != -1 && fileIndex != -1) {
//                String ext_Name = path.substring(extIndex);
//                String file_Name = path.substring(fileIndex, extIndex);
//                byte[] bytes = downloadPictureToBytes(urlPrefix + "/" + img.getPath());
//                String filePath = imgFeiServiceImpl.moveFileUpload(bytes, ext_Name, file_Name);
//                imgMapper.updatePathById(img.getId(), filePath);
//                // 等待1秒在请求，防止请求太频繁
//                try {
//                    Thread.sleep(1000);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//        return "文件迁移成功";
//    }
//
//    //链接url读取图片
//    private static byte[] downloadPictureToBytes(String urlList) {
//        URL url = null;
//        byte[] context = null;
//        try {
//            url = new URL(urlList);
//            DataInputStream dataInputStream = new DataInputStream(url.openStream());
//            ByteArrayOutputStream output = new ByteArrayOutputStream();
//
//            byte[] buffer = new byte[1024];
//            int length;
//
//            while ((length = dataInputStream.read(buffer)) > 0) {
//                output.write(buffer, 0, length);
//            }
//            context = output.toByteArray();
//            dataInputStream.close();
//        } catch (MalformedURLException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return context;
//    }
//
//    /**
//     * 从本地文件夹对应数据库地址迁移
//     * @param imgRootPath
//     * @return
//     */
////    @PostMapping("/moveRealFile")
////    @Transactional
//    public String moveRealFile(@RequestParam String imgRootPath) {
//        String rootPath = imgRootPath;
//        List<Img> list = readFilePath(rootPath);
//        if (list != null && list.size() > 0) {
//            // 根据路径获取图片在数据库的id
//            List<Img> imgList = imgMapper.queryByPathList(list);
//            if (imgList != null && imgList.size() > 0) {
//                for (Img img : imgList) {
//                    Long id = img.getId();
//                    String path = img.getPath();
//
//                    File file = new File(rootPath + "/" + path);
//                    if (!file.exists()) {
//                        // do nothing
//                        continue;
//                    }
//                    String filePath = imgFeiServiceImpl.moveFileUpload(file);
//                    imgMapper.updatePathById(id, filePath);
//                }
//
//            }
//        }
//        return "文件迁移成功";
//    }
//
//    private List<Img> readFilePath(String filePath) {
//        List<Img> list = new ArrayList<>();
//        File file = new File(filePath);
//        File[] nextFiles;
//        // 图片文件夹根目录层
//        if (!file.exists()) {
//            log.info("图片文件夹不存在");
//            return list;
//        }
//        nextFiles = file.listFiles();
//        if (nextFiles == null || nextFiles.length == 0) {
//            log.info("openId名文件夹不存在");
//            return list;
//        }
//        // openId名层
//        for (File openF : nextFiles) {
//            File[] classNameFiles = openF.listFiles();
//            if (classNameFiles == null || classNameFiles.length == 0) {
//                continue;
//            }
//            String openId = openF.getName();
//
//            // className层
//            for (File cnF : classNameFiles) {
//                File[] fileNameFiles = cnF.listFiles();
//                if (fileNameFiles == null || fileNameFiles.length == 0) {
//                    continue;
//                }
//                String className = cnF.getName();
//
//                // fileName层
//                for (File fnF : fileNameFiles) {
//                    File[] imgFiles = fnF.listFiles();
//                    if (imgFiles == null || imgFiles.length == 0) {
//                        continue;
//                    }
//                    String fileName = fnF.getName();
//
//                    // 具体图片层
//                    for (File imgFile : imgFiles) {
//                        String imgPath = openId + "/" + className + "/" + fileName + "/" + imgFile.getName();
//                        Img img = new Img();
//                        img.setPath(imgPath);
//                        list.add(img);
//                    }
//                }
//            }
//        }
//        return list;
//    }
//
//}
